import type { SystemMenuDataItem } from '@/system-typing';
import type { TFunction } from 'i18next';

export const getCurrentMenu = (
  menuList?: SystemMenuDataItem[],
  routePath?: string
): null | SystemMenuDataItem => {
  if (!routePath || routePath === '' || routePath === '/') {
    return null;
  }
  // eslint-disable-next-line no-restricted-syntax
  for (const idx in menuList) {
    if (!menuList[idx].path) {
      if (menuList[idx].path === routePath) {
        return menuList[idx];
      }
      // @ts-ignore
      if (pathToRegexp(menuList[idx].path).exec(routePath)) {
        return menuList[idx];
      } // @ts-ignore
      if (menuList[idx].children && menuList[idx].children.length > 0) {
        // eslint-disable-next-line @typescript-eslint/no-unused-vars
        const menu = getCurrentMenu(menuList[idx].children, routePath);
        if (menu) {
          return menu;
        }
      }
    }
  }
  return null;
};

/**
 * 根据当前路由地址,获取对应菜单的菜单名
 * @param defaultTitle 默认标题
 * @param i18nFormat 国际化函数
 * @param menuList 菜单数据
 * @param routePath 当前路由
 */
export function getPageTitle(
  defaultTitle: string,
  i18nFormat: TFunction,
  menuList?: SystemMenuDataItem[],
  routePath?: string
): string {
  const menu = getCurrentMenu(menuList, routePath);
  if (menu && menu.i18n) {
    return i18nFormat(menu.i18n);
  }
  return defaultTitle;
}
